Facial Beauty Prediction
模型很简单,重要的是训练数据,在此感谢A Diverse Benchmark Dataset for Multi-Paradigm Facial Beauty Prediction 打分标准:0~5,应该是开区间吧,不然得0分的怎么办,比如我。。。 简单说下我使用的模型
- 按照论文说明,使用效果最好的训练好的resnet50
- 最后接一层linear输出分数,使用Relu作为激活函数
- 损失函数使用SmoothL1Loss,在我这里效果优于MSEloss,前期更快收敛(猜测,无证明)
贴下代码
模型
class Beauty(nn.Module):
def __init__(self):
super().__init__()
self.resnet = resnet50(True)
self.predict = nn.Linear(1000, 1)
self._reset_parameters()
def forward(self, x):
out = nn.functional.relu(self.resnet(x))
score = self.predict(out)
return score
def _reset_parameters(self):
for p in self.resnet.parameters():
p.requires_grad = False
self.predict.weight.data.uniform_(-.1, .1)
def get_trainable_parameters(self):
return filter(lambda m: m.requires_grad, self.parameters())
预测
class Predict:
def __init__(self):
model_source = torch.load(
"./model.pt", map_location=lambda storage, loc: storage)
model = Beauty()
model.load_state_dict(model_source["model"])
model.eval()
self.model = model
self.encode = T.Compose([
T.Resize(224),
T.ToTensor()
])
def img2V(self, img):
t = self.encode(Image.open(img).convert('RGB')).unsqueeze(0)
return Variable(t, volatile=True)
def divine(self, img):
v = self.img2V(img)
score = self.model(v)
return round(score.data.tolist()[0][0], 3)
预测效果
- 吴彦祖 4.251分
- 来个我同学(已征得同意) 2.298分